/*
 * ngtk-basic-text-entry.h - Part of the NGtk library
 *
 * Copyright (c) 2011, Barak Itkin <lightningismyname at gmail dot com>
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *     * Redistributions of source code must retain the above copyright
 *       notice, this list of conditions and the following disclaimer.
 *     * Redistributions in binary form must reproduce the above copyright
 *       notice, this list of conditions and the following disclaimer in the
 *       documentation and/or other materials provided with the distribution.
 *     * Neither the name of the NGtk nor the names of its contributors may
 *       be used to endorse or promote products derived from this software
 *       without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

#ifndef __NGtk_basic_text_entry_h__
#define __NGtk_basic_text_entry_h__

#include "ngtk-basic-types.h"
#include "../../utils/ngtk-utils.h"

typedef struct _NGtkTextEntryF {
	int   (*get_cursor_position) (NGtkTextEntry *self);
	char* (*get_text_buf_ptr)    (NGtkTextEntry *self);
	int   (*get_max_text_len)    (NGtkTextEntry *self);
} NGtkTextEntryF;

typedef struct _NGtkBasicTextEntryD {
	int   cur_pos;
	int   max_text_len; /* Not including the '\0' */
	char *text;
} NGtkBasicTextEntryD;

#define NGTK_TEXT_ENTRY_O2F(comp) NGTK_O2F_CAST(comp,NGTK_TEXT_ENTRY_TYPE,NGtkTextEntryF)
#define NGTK_TEXT_ENTRY_I2F(comp) NGTK_I2F_CAST(comp,NGTK_TEXT_ENTRY_TYPE,NGtkTextEntryF)

#define NGTK_BASIC_TEXT_ENTRY_O2D(comp) NGTK_O2D_CAST(comp,NGTK_TEXT_ENTRY_TYPE,NGtkBasicTextEntryD,0)
#define NGTK_BASIC_TEXT_ENTRY_I2D(comp) NGTK_I2D_CAST(comp,NGTK_TEXT_ENTRY_TYPE,NGtkBasicTextEntryD,0)

/* The following functions only wrap calls instead of doing them
 * directly from the NGtkTextEntryF object */

int   ngtk_text_entry_get_cursor_position    (NGtkTextEntry *self);
char* ngtk_text_entry_get_text_buf_ptr       (NGtkTextEntry *self);
int   ngtk_text_entry_get_max_text_len       (NGtkTextEntry *self);

/* And the implementation */
NGtkTextEntryI*  ngtk_basic_text_entry_create_interface (NGtkObject *obj, const char *initial_text, int max_text_len);
int   ngtk_basic_text_entry_get_cursor_position    (NGtkTextEntry *self);
char* ngtk_basic_text_entry_get_text_buf_ptr       (NGtkTextEntry *self);
int   ngtk_basic_text_entry_get_max_text_len       (NGtkTextEntry *self);

#endif
